# encoding: utf-8


import os


class BatchRename():
    def __init__(self):
        self.srcImagePath = 'D:/VOC2007/JPEGImages'  # 源路径
        self.destImagePath = 'D:/VOC2007/JPEGImages/重新编号_YD'  # 目标路径

    def rename(self):
        src_name_start = 0  # 源路径下第一张需要改名的图片的编号
        src_name_end = 1600  # 源路径下最后一张需要改名的图片的编号
        dest_name_start = 1  # 目标路径下第一张图片的命名

        for i in range(src_name_start, src_name_end + 1):
            # 原图片文件名，不足6位，左边补0
            src_filename = f"{str(i).rjust(6, '0')}.jpg"
            print(f"当前:{src_filename}")
            # 检查图片是否存在
            if os.path.exists(f"{self.srcImagePath}/{src_filename}"):
                # 原图片路径
                src_file_path = f"{self.srcImagePath}/{src_filename}"
                # 目标图片文件名，不足6位，左边补0
                dest_filename = f"{str(dest_name_start).rjust(6, '0')}.jpg"
                # 目标图片路径
                dest_file_path = f"{self.destImagePath}/{dest_filename}"
                # 开始复制
                try:
                    self.copy(src_file_path, dest_file_path)
                    print(f"复制成功:{src_filename} -> {dest_filename}")
                    dest_name_start += 1
                except:
                    print(f"复制失败:{src_filename} -> {dest_filename}")
            # 文件不存在则跳过本次复制
            else:
                continue

    def copy(self, src, dest):
        # 检查目标路径是否不存在，不存在需要先创建文件夹
        if not os.path.exists(f"{self.destImagePath}"):
            os.makedirs(self.destImagePath)
        # 复制到目标路径
        with open(f"{src}", "rb") as src_image:
            with open(f"{dest}", "wb") as dest_image:
                dest_image.write(src_image.read())


if __name__ == '__main__':
    demo = BatchRename()
    demo.rename()
